home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 8206 / 8206.xpi / content / rss / sprintf.js < prev    next >
Text File  |  2010-02-02  |  6KB  |  133 lines

  1. /* Function printf(format_string,arguments...)
  2.  * Javascript emulation of the C printf function (modifiers and argument types 
  3.  *    "p" and "n" are not supported due to language restrictions)
  4.  *
  5.  * Copyright 2003 K&L Productions. All rights reserved
  6.  * http://www.klproductions.com 
  7.  *
  8.  * Terms of use: This function can be used free of charge IF this header is not
  9.  *               modified and remains with the function code.
  10.  * 
  11.  * Legal: Use this code at your own risk. K&L Productions assumes NO resposibility
  12.  *        for anything.
  13.  ********************************************************************************/
  14. function WiseStampSprintf(fstring)
  15.   { var pad = function(str,ch,len)
  16.       { var ps='';
  17.         for(var i=0; i<Math.abs(len); i++) ps+=ch;
  18.         return len>0?str+ps:ps+str;
  19.       }
  20.     var processFlags = function(flags,width,rs,arg)
  21.       { var pn = function(flags,arg,rs)
  22.           { if(arg>=0)
  23.               { if(flags.indexOf(' ')>=0) rs = ' ' + rs;
  24.                 else if(flags.indexOf('+')>=0) rs = '+' + rs;
  25.               }
  26.             else
  27.                 rs = '-' + rs;
  28.             return rs;
  29.           }
  30.         var iWidth = parseInt(width,10);
  31.         if(width.charAt(0) == '0')
  32.           { var ec=0;
  33.             if(flags.indexOf(' ')>=0 || flags.indexOf('+')>=0) ec++;
  34.             if(rs.length<(iWidth-ec)) rs = pad(rs,'0',rs.length-(iWidth-ec));
  35.             return pn(flags,arg,rs);
  36.           }
  37.         rs = pn(flags,arg,rs);
  38.         if(rs.length<iWidth)
  39.           { if(flags.indexOf('-')<0) rs = pad(rs,' ',rs.length-iWidth);
  40.             else rs = pad(rs,' ',iWidth - rs.length);
  41.           }    
  42.         return rs;
  43.       }
  44.     var converters = new Array();
  45.     converters['c'] = function(flags,width,precision,arg)
  46.       { if(typeof(arg) == 'number') return String.fromCharCode(arg);
  47.         if(typeof(arg) == 'string') return arg.charAt(0);
  48.         return '';
  49.       }
  50.     converters['d'] = function(flags,width,precision,arg)
  51.       { return converters['i'](flags,width,precision,arg); 
  52.       }
  53.     converters['u'] = function(flags,width,precision,arg)
  54.       { return converters['i'](flags,width,precision,Math.abs(arg)); 
  55.       }
  56.     converters['i'] =  function(flags,width,precision,arg)
  57.       { var iPrecision=parseInt(precision);
  58.         var rs = ((Math.abs(arg)).toString().split('.'))[0];
  59.         if(rs.length<iPrecision) rs=pad(rs,' ',iPrecision - rs.length);
  60.         return processFlags(flags,width,rs,arg); 
  61.       }
  62.     converters['E'] = function(flags,width,precision,arg) 
  63.       { return (converters['e'](flags,width,precision,arg)).toUpperCase();
  64.       }
  65.     converters['e'] =  function(flags,width,precision,arg)
  66.       { iPrecision = parseInt(precision);
  67.         if(isNaN(iPrecision)) iPrecision = 6;
  68.         rs = (Math.abs(arg)).toExponential(iPrecision);
  69.         if(rs.indexOf('.')<0 && flags.indexOf('#')>=0) rs = rs.replace(/^(.*)(e.*)$/,'$1.$2');
  70.         return processFlags(flags,width,rs,arg);        
  71.       }
  72.     converters['f'] = function(flags,width,precision,arg)
  73.       { iPrecision = parseInt(precision);
  74.         if(isNaN(iPrecision)) iPrecision = 6;
  75.         rs = (Math.abs(arg)).toFixed(iPrecision);
  76.         if(rs.indexOf('.')<0 && flags.indexOf('#')>=0) rs = rs + '.';
  77.         return processFlags(flags,width,rs,arg);
  78.       }
  79.     converters['G'] = function(flags,width,precision,arg)
  80.       { return (converters['g'](flags,width,precision,arg)).toUpperCase();
  81.       }
  82.     converters['g'] = function(flags,width,precision,arg)
  83.       { iPrecision = parseInt(precision);
  84.         absArg = Math.abs(arg);
  85.         rse = absArg.toExponential();
  86.         rsf = absArg.toFixed(6);
  87.         if(!isNaN(iPrecision))
  88.           { rsep = absArg.toExponential(iPrecision);
  89.             rse = rsep.length < rse.length ? rsep : rse;
  90.             rsfp = absArg.toFixed(iPrecision);
  91.             rsf = rsfp.length < rsf.length ? rsfp : rsf;
  92.           }
  93.         if(rse.indexOf('.')<0 && flags.indexOf('#')>=0) rse = rse.replace(/^(.*)(e.*)$/,'$1.$2');
  94.         if(rsf.indexOf('.')<0 && flags.indexOf('#')>=0) rsf = rsf + '.';
  95.         rs = rse.length<rsf.length ? rse : rsf;
  96.         return processFlags(flags,width,rs,arg);        
  97.       }  
  98.     converters['o'] = function(flags,width,precision,arg)
  99.       { var iPrecision=parseInt(precision);
  100.         var rs = Math.round(Math.abs(arg)).toString(8);
  101.         if(rs.length<iPrecision) rs=pad(rs,' ',iPrecision - rs.length);
  102.         if(flags.indexOf('#')>=0) rs='0'+rs;
  103.         return processFlags(flags,width,rs,arg); 
  104.       }
  105.     converters['X'] = function(flags,width,precision,arg)
  106.       { return (converters['x'](flags,width,precision,arg)).toUpperCase();
  107.       }
  108.     converters['x'] = function(flags,width,precision,arg)
  109.       { var iPrecision=parseInt(precision);
  110.         arg = Math.abs(arg);
  111.         var rs = Math.round(arg).toString(16);
  112.         if(rs.length<iPrecision) rs=pad(rs,' ',iPrecision - rs.length);
  113.         if(flags.indexOf('#')>=0) rs='0x'+rs;
  114.         return processFlags(flags,width,rs,arg); 
  115.       }
  116.     converters['s'] = function(flags,width,precision,arg)
  117.       { var iPrecision=parseInt(precision);
  118.         var rs = arg;
  119.         if(rs.length > iPrecision) rs = rs.substring(0,iPrecision);
  120.         return processFlags(flags,width,rs,0);
  121.       }
  122.     var farr = fstring.split('%');
  123.     var retstr = farr[0];
  124.     var fpRE = /^([-+ #]*)(\d*)\.?(\d*)([cdieEfFgGosuxX])(.*)$/;
  125.     for(var i=1; i<farr.length; i++)
  126.       { var fps=fpRE.exec(farr[i]);
  127.         if(!fps) continue;
  128.         if(arguments[i]!=null) retstr+=converters[fps[4]](fps[1],fps[2],fps[3],arguments[i]);
  129.         retstr += fps[5];
  130.       }
  131.     return retstr;
  132.   }
  133. /* Function printf() END */